﻿Option Explicit On
Option Strict On

Imports System.Data
Imports System.Data.OleDb

'Documentación XML
''' <summary>
''' Esta clase almacenará los equipos de padel que estan inscritos
''' </summary>
''' <author> Jerón Fernández Caballero Rico</author>
''' <author> Daniel Morato Baudi</author>

Public Class Equipo

    'Atributos
    Private _ListaEquipos As List(Of Equipo)
    Private _ListaJugadores As List(Of Jugador)
    Private _Nombre As String
    Private _Entrenador As String
    Private _Capitan As String
    Private _Contacto As String

    'Constructores
    Public Sub New()

        Me._ListaEquipos = New List(Of Equipo)
        Me._ListaJugadores = New List(Of Jugador)
        Me._Nombre = ""
        Me._Entrenador = ""
        Me._Capitan = ""
        Me._Contacto = ""

    End Sub

    'Documentación XML
    ''' <param name="NombreEquipo">(String) Nombre del equipo.</param>
    ''' <param name="Entrenador">(String) Nombre del entrenador.</param>
    ''' <param name="Capitan">(String) Nombre del líder del equipo.</param>
    ''' <param name="Contacto">(String) Forma de contacto con el líder del equipo.</param>
    Public Sub New(ByVal NombreEquipo As String, ByVal Entrenador As String,
                   ByVal Capitan As String, ByVal Contacto As String,
                   ByVal ListaJugadores As List(Of Jugador))

        Me._Nombre = ComprobarCadena(NombreEquipo)
        Me._Entrenador = ComprobarCadena(Entrenador)
        Me._Capitan = ComprobarCadena(Capitan)
        Me._Contacto = Contacto

        For Each NuevoJugador As Jugador In ListaJugadores
            Me._ListaJugadores.Add(NuevoJugador)
        Next

    End Sub

    ' Métodos
    ''' <param name="NuevoEquipo">(Equipo) Nuevo equipo a añadir.</param>
    Public Sub AnyadirEquipo(ByVal NuevoEquipo As Equipo)

        Me._ListaEquipos.Add(NuevoEquipo)

    End Sub

    ''' <param name="Equipo1">(Equipo) Equipo que insertaremos en la base de datos.</param>
    ''' <param name="NombreJugador1">(String) Nombre del primer jugador del equipo.</param>
    ''' <param name="NombreJugador2">(String) Nombre del segundo jugador del equipo.</param>
    Public Sub InsertarEnBD(ByVal Equipo1 As Equipo,
                            ByVal NombreJugador1 As String,
                            ByVal NombreJugador2 As String)

        Dim MiBD As New BaseDatos
        Dim EquipoInsertar As String
        Dim Mensaje As String

        EquipoInsertar = "INSERT INTO Equipo (Nombre, " & _
                         "Entrenador, Capitan, " & _
                         "Contacto) VALUES ('" & _
                         Equipo1._Nombre & "', '" & _
                         Equipo1._Entrenador & "', '" & _
                         Equipo1._Capitan & "', '" & _
                         Equipo1._Contacto & "');"

        Mensaje = MiBD.Insertar(EquipoInsertar)

        Dim Consulta As OleDbDataReader
        Dim IdJugador As String = ""
        Dim NomJugador As String = ""
        Dim IdEquipo As String = ""
        Dim NomEquipo As String = ""

        ' Obetenemos los datos del Equipo
        Consulta = Equipo1.ConsultarBD("Id_Equipo, Nombre", "Nombre = '" & Equipo1._Nombre & "'")

        While Consulta.Read
            IdEquipo = CStr(Consulta(0))
            NomEquipo = CStr(Consulta(1))
        End While

        ' Obtenemos los datos del Jugador 1 e insertamos
        Consulta = MiBD.Leer("SELECT Id_Jugador, Nombre FROM Jugador" & _
                             " WHERE Nombre = '" & NombreJugador1 & "'")
        While Consulta.Read
            IdJugador = CStr(Consulta(0))
            NomJugador = CStr(Consulta(1))
        End While

        EquipoInsertar = "INSERT INTO JugadorEquipo (Id_Jugador, Id_Equipo," & _
                         " Nombre_Jugador, Nombre_Equipo)Values ('" & _
                         IdJugador & "','" & IdEquipo & "','" & NomJugador & _
                         "','" & NomEquipo & "')"

        Mensaje = MiBD.Insertar(EquipoInsertar)

        ' Obtenemos los datos del Jugador 2 e insertamos
        Consulta = MiBD.Leer("SELECT Id_Jugador, Nombre FROM Jugador" & _
                             " WHERE Nombre = '" & NombreJugador2 & "'")
        While Consulta.Read
            IdJugador = CStr(Consulta(0))
            NomJugador = CStr(Consulta(1))
        End While

        EquipoInsertar = "INSERT INTO JugadorEquipo (Id_Jugador, Id_Equipo," & _
                         " Nombre_Jugador, Nombre_Equipo) Values ('" & _
                         IdJugador & "','" & IdEquipo & "','" & NomJugador & _
                         "','" & NomEquipo & "')"

        Mensaje = MiBD.Insertar(EquipoInsertar)
        MsgBox(Mensaje)
        FormEntrada.tsp_lb_Mensajes.Text = Mensaje
        FormEntrada.tsp_lb_Mensajes.Visible = True

    End Sub

    ''' <param name="CampoBuscado">(String) Campo que queremos obtener de la base de datos.</param>
    ''' <param name="Filtro">(Opcional)(String) Filtro que aplicaremos a nuestra búsqueda.</param>
    ''' <returns>(OleDbDataReader)  Devuelve un objeto DataReader con los datos leídos.</returns>
    Public Function ConsultarBD(ByVal CampoBuscado As String,
                                Optional ByVal Filtro As String = "") As OleDbDataReader

        Dim MiBD As New BaseDatos
        Dim DatosLeidos As OleDbDataReader

        If Filtro.Length > 0 Then
            DatosLeidos = MiBD.Leer("SELECT " & CampoBuscado & " FROM Equipo WHERE " & Filtro)
        Else
            DatosLeidos = MiBD.Leer("SELECT " & CampoBuscado & " FROM Equipo")
        End If

        Return DatosLeidos

    End Function

    ''' <param name="EquipoBorrar">(String) Equipo que borraremos de la base de datos.</param>
    Public Sub BorrarDeBD(ByVal EquipoBorrar As String)

        Dim MiBD As New BaseDatos
        MiBD.Borrar("DELETE * FROM Equipo WHERE Nombre = '" & EquipoBorrar & "'")

    End Sub

    'Destructores
    Public Sub Dispose()

        Me._ListaEquipos = Nothing
        Me._ListaJugadores = Nothing
        Me._Nombre = ""
        Me._Entrenador = ""
        Me._Capitan = ""
        Me._Contacto = ""

    End Sub
    Protected Overrides Sub Finalize()

        Me._ListaEquipos = Nothing
        Me._ListaJugadores = Nothing
        Me._Nombre = ""
        Me._Entrenador = ""
        Me._Capitan = ""
        Me._Contacto = ""

    End Sub

    ' Get/Set
    Public Property Nombre() As String
        Get
            Return Me._Nombre
        End Get
        Set(ByVal value As String)
            Me._Nombre = ComprobarCadena(value)
        End Set
    End Property
    Public Property Entrenador() As String
        Get
            Return Me._Entrenador
        End Get
        Set(ByVal value As String)
            Me._Entrenador = ComprobarCadena(value)
        End Set
    End Property
    Public Property Capitan() As String
        Get
            Return Me._Capitan
        End Get
        Set(ByVal value As String)
            Me._Capitan = ComprobarCadena(value)
        End Set
    End Property
    Public Property Contacto() As String
        Get
            Return Me._Contacto
        End Get
        Set(ByVal value As String)
            Me._Contacto = value
        End Set
    End Property
    Public ReadOnly Property ListaEquipos() As List(Of Equipo)
        Get
            Return Me._ListaEquipos
        End Get
    End Property
    Public ReadOnly Property ListaJugadores() As List(Of Jugador)
        Get
            Return Me._ListaJugadores
        End Get
    End Property

End Class